home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 2.toast / pc / sample code / quicktime / quicktime for java / groupdrawing / src / groupdrawing.java next >
Encoding:
Java Source  |  2000-09-28  |  5.8 KB  |  166 lines

  1. /*
  2.  * QuickTime for Java SDK Sample Code
  3.  
  4.    Usage subject to restrictions in SDK License Agreement
  5.  * Copyright: © 1996-1999 Apple Computer, Inc.
  6.  
  7.  */
  8. import java.awt.*;
  9. import java.awt.event.*;
  10. import java.io.*;
  11.  
  12. import quicktime.qd.*;
  13. import quicktime.*;
  14. import quicktime.io.*;
  15. import quicktime.std.*;
  16. import quicktime.std.movies.*;
  17. import quicktime.std.image.*;
  18. import quicktime.app.QTFactory;
  19. import quicktime.app.display.*;
  20. import quicktime.app.players.*;
  21. import quicktime.app.image.*;
  22. import quicktime.app.actions.*;
  23. import quicktime.app.anim.*;
  24.  
  25. public class GroupDrawing extends Frame implements StdQTConstants {    
  26.  
  27.     public static void main (String args[]) {
  28.         try {
  29.             QTSession.open();
  30.             GroupDrawing gd = new GroupDrawing("QT in Java");
  31.             
  32.             gd.pack();
  33.             gd.show();
  34.             gd.toFront();
  35.         } catch (Exception e) {
  36.             e.printStackTrace();
  37.             QTSession.close();
  38.         }
  39.     }
  40.     
  41.     GroupDrawing (String title) throws Exception {
  42.         super (title);
  43.  
  44.         QTCanvas myQTCanvas = new QTCanvas(QTCanvas.kAspectResize, 0, 0);
  45.         add("Center", myQTCanvas);
  46.         
  47.         addWindowListener(new WindowAdapter () {
  48.             public void windowClosing (WindowEvent e) {
  49.                 QTSession.close();
  50.                 dispose();
  51.             }
  52.             public void windowClosed (WindowEvent e) { 
  53.                 System.exit(0);
  54.             }
  55.         });
  56.  
  57.             // setupGroup
  58.         int kWidth = 300, kHeight = 300;
  59.         Dimension d = new Dimension (kWidth, kHeight);
  60.         DirectGroup drawer = new DirectGroup(d, QDColor.gray);
  61.     
  62.         QTPlayer p1 = makePlayer (new QTFile (QTFactory.findAbsolutePath ("jumps.mov")));
  63.         drawer.addMember (p1, 1, 0.1F, 0.2F);
  64.         
  65.         Compositor shipAnimation = new Compositor (new QDGraphics (new QDRect(200, 200)), 
  66.                                                     QDColor.lightGray, 20, 1); 
  67.         addSprites (shipAnimation);
  68.         shipAnimation.setLocation (kWidth - 160, kHeight - 160);
  69.         drawer.addMember (shipAnimation, 2);
  70.         
  71.         QTFile imageFile = new QTFile (QTFactory.findAbsolutePath ("pics/house.jpg"));
  72.         GraphicsImporterDrawer if1 = new GraphicsImporterDrawer (imageFile);
  73.         if1.setDisplayBounds (new QDRect (kWidth, kHeight));
  74.         // we use an ImagePresener for this member as the dragging is much quicker
  75.         ImagePresenter ip = ImagePresenter.fromGraphicsImporterDrawer (if1);
  76.         drawer.addMember (ip, 3);
  77.         
  78.         Dragger dragger = new Dragger (MouseResponder.kNoModifiersMask);
  79.         dragger.setConstrained(Dragger.kConstrainNone);
  80.         GroupController controller1 = new GroupController (dragger, false);
  81.         controller1.addMember (p1);
  82.         controller1.addMember (shipAnimation);
  83.         drawer.addController (controller1);
  84.  
  85.         Dragger dragger2 = new Dragger (MouseResponder.kNoModifiersMask);
  86.         GroupController controller2 = new GroupController (dragger2, false);
  87.         controller2.addMember (ip);        
  88.         drawer.addController (controller2);
  89.         
  90.         LayerChanger lc = new LayerChanger (InputEvent.ALT_MASK);
  91.         GroupController controller3 = new GroupController (lc, true);
  92.         drawer.addController (controller3);
  93.  
  94.         myQTCanvas.setClient (drawer, true);
  95.         
  96.         shipAnimation.getTimer().setRate(1);
  97.         drawer.getTimer().setRate (1);
  98.     }
  99.     
  100.         // use a file input stream to make dragging faster as the movie is comletetly loaded into memory
  101.         // this is not required for any other reason
  102.     private static QTPlayer makePlayer (QTFile f) throws IOException, QTException {
  103.         QTDrawable d = QTFactory.makeDrawable (new FileInputStream(f), kDataRefFileExtensionTag, "mov");
  104.         Movie m = ((QTPlayer)d).getMovieController().getMovie();
  105.         m.getTimeBase().setFlags (loopTimeBase);    
  106.         return (QTPlayer)d;
  107.     }
  108.     
  109.     private static ImagePresenter makeImagePresenter (QTFile file, QDRect size) throws Exception {
  110.         GraphicsImporterDrawer if1 = new GraphicsImporterDrawer (file);
  111.         if1.setDisplayBounds (size);
  112.         return ImagePresenter.fromGraphicsImporterDrawer (if1);
  113.     }    
  114.  
  115.     private static void addSprites (Compositor sh) throws IOException, QTException {
  116.         File matchFile = QTFactory.findAbsolutePath ("images/Ship01.pct");    //this file must exist in the directory!!!    
  117.         ImageDataSequence isp = ImageUtil.createSequence (matchFile);
  118.         ImageDataSequence seq = ImageUtil.makeTransparent (isp, QDColor.blue);
  119.  
  120. // Build Sprites
  121.         Matrix matrix1 = new Matrix();
  122.         matrix1.setTx(20);
  123.         matrix1.setTy(20);
  124.         matrix1.setSx(0.8F);
  125.         matrix1.setSy(0.8F);
  126.         TwoDSprite s1 = new TwoDSprite(seq, 4, matrix1, true, 1);
  127.         sh.addMember (s1);
  128.         
  129.         Matrix matrix2 = new Matrix();    
  130.         matrix2.setTx(4);
  131.         matrix2.setTy(4);
  132.         TwoDSprite s2 = new TwoDSprite(seq, 1, matrix2, true, 10);
  133.         sh.addMember (s2);
  134.         
  135.         // This needs to be a 32bit QDGraphics so the blend mode will 
  136.         // be applied correctly to this sprite
  137.         File shipFile = QTFactory.findAbsolutePath ("images/Ship10.pct");
  138.         GraphicsImporterDrawer ip = new GraphicsImporterDrawer (new QTFile(shipFile));
  139.         QDRect r = new QDRect (ip.getDescription().getWidth(), ip.getDescription().getHeight());
  140.         ImageSpec si = ImageUtil.makeTransparent (ip, QDColor.blue, new QDGraphics (QDGraphics.kDefaultPixelFormat, r));
  141.         Matrix matrix3 = new Matrix();    
  142.         matrix3.setTx(50);
  143.         matrix3.setTy(50);
  144.         TwoDSprite s3 = new TwoDSprite(si, matrix3, true, 8, new GraphicsMode (QDConstants.blend, QDColor.green));
  145.         sh.addMember(s3);
  146.  
  147. // Add Controllers
  148. // Build ActionList
  149.         SimpleActionList al = new SimpleActionList();
  150.         ImageSequencer is = new ImageSequencer (seq);
  151.         is.setLooping (ImageSequencer.kLoopForwards);
  152.         al.addMember (new NextImageAction (10, 1, is, s1));
  153.         al.addMember (new BounceAction (5, 1, sh, s1, 3, 2));
  154.         ImageSequencer is2 = new ImageSequencer (seq);
  155.         is2.setLooping (ImageSequencer.kLoopForwards);
  156.         al.addMember (new NextImageAction (20, 1, is2, s2));
  157.         al.addMember (new BounceAction (20, 1, sh, s2, 4, 3));
  158.         sh.addController(al);
  159.  
  160. // Add Dragger
  161.         Dragger dragger = new Dragger (InputEvent.SHIFT_MASK);
  162.         SWController controller = new SWController (dragger, true);
  163.         sh.addController (controller);
  164.     }
  165. }
  166.